package com.Zxing.Demo;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Vector;

import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;

import com.Zxing.Demo.camera.CameraManager;
import com.Zxing.Demo.decoding.CaptureActivityHandler;
import com.Zxing.Demo.decoding.InactivityTimer;
import com.Zxing.Demo.view.ViewfinderView;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.Result;
import com.xsm.DataBase.ReadMessage;
import com.xsm.activitygroup.R;
import com.xsm.activitygroup.R.string;
import com.xsm.internet.PostMessage;
import com.xsm.view.LoadDialog;

import android.R.integer;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.content.res.AssetFileDescriptor;
import android.graphics.Bitmap;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Vibrator;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.View;
import android.view.Window;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class CaptureActivity extends Activity implements Callback {

	private CaptureActivityHandler handler;
	private ViewfinderView viewfinderView;
	private boolean hasSurface;
	private Vector<BarcodeFormat> decodeFormats;
	private String characterSet;
	private TextView txtResult;
	private InactivityTimer inactivityTimer;
	private MediaPlayer mediaPlayer;
	private boolean playBeep;
	private static final float BEEP_VOLUME = 0.10f;
	private boolean vibrate;
    private Context context;
    private String ISBN="";
    private EditText editText;	
	/** Called when the activity is first created. */
    int isrun=0;
    GetBookHandler handler2;
    LoadDialog mydialog;
    Button scan;
    HashMap<String,String> values=new HashMap<String, String>();
    String booktypeString="";
	public void onCreate(Bundle savedInstanceState) {
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		super.onCreate(savedInstanceState);
		setContentView(R.layout.zxing);
		CameraManager.init(getApplication());
		viewfinderView = (ViewfinderView) findViewById(R.id.viewfinder_view);
		txtResult = (TextView) findViewById(R.id.txtResult);
		hasSurface = false;
		inactivityTimer = new InactivityTimer(this);
		context=this;
		handler2=new GetBookHandler();
		scan=(Button)findViewById(R.id.scan);
		scan.getBackground().setAlpha(100);
		
	}

	@Override
	protected void onResume() {
		super.onResume();
		SurfaceView surfaceView = (SurfaceView) findViewById(R.id.preview_view);
		SurfaceHolder surfaceHolder = surfaceView.getHolder();
		if (hasSurface) {
			initCamera(surfaceHolder);
		} else {
			surfaceHolder.addCallback(this);
			surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
		}
		decodeFormats = null;
		characterSet = null;

		playBeep = true;
		AudioManager audioService = (AudioManager) getSystemService(AUDIO_SERVICE);
		if (audioService.getRingerMode() != AudioManager.RINGER_MODE_NORMAL) {
			playBeep = false;
		}
		initBeepSound();
		vibrate = true;
	}

	@Override
	protected void onPause() {
		super.onPause();
		if (handler != null) {
			handler.quitSynchronously();
			handler = null;
		}
		CameraManager.get().closeDriver();
	}

	@Override
	protected void onDestroy() {
		inactivityTimer.shutdown();
		super.onDestroy();
	}

	private void initCamera(SurfaceHolder surfaceHolder) {
		try {
			CameraManager.get().openDriver(surfaceHolder);
		} catch (IOException ioe) {
			return;
		} catch (RuntimeException e) {
			return;
		}
		if (handler == null) {
			handler = new CaptureActivityHandler(this, decodeFormats,
					characterSet);
		}
	}

	@Override
	public void surfaceChanged(SurfaceHolder holder, int format, int width,
			int height) {

	}

	@Override
	public void surfaceCreated(SurfaceHolder holder) {
		if (!hasSurface) {
			hasSurface = true;
			initCamera(holder);
		}

	}

	@Override
	public void surfaceDestroyed(SurfaceHolder holder) {
		hasSurface = false;

	}

	public ViewfinderView getViewfinderView() {
		return viewfinderView;
	}

	public Handler getHandler() {
		return handler;
	}

	public void drawViewfinder() {
		viewfinderView.drawViewfinder();

	}

	public void handleDecode(Result obj, Bitmap barcode) {
        mydialog=new LoadDialog(context, "正在获取信息...");
        mydialog.showDialog();
		inactivityTimer.onActivity();
	    //	viewfinderView.drawResultBitmap(barcode);
		//playBeepSoundAndVibrate();
		//txtResult.setText(obj.getText());
		new Thread(new Getmessage(obj.getText())).start();
	}

	public void Enter(View view){
editText=new EditText(context);		
editText.setText(ISBN);		
new AlertDialog.Builder(this).setTitle("请输入条形编码").setIcon( 
android.R.drawable.ic_dialog_info).setView(editText)
 .setPositiveButton("确定", new OnClickListener() {
	public void onClick(DialogInterface dialog, int which) {
String code=editText.getText().toString().trim();
if(code.equals("")){
	Toast.makeText(context, "请输入条形编码", Toast.LENGTH_LONG).show();
}else {
	mydialog=new LoadDialog(context, "正在获取信息...");
	mydialog.showDialog();
	new Thread(new Getmessage(code)).start();
}
	}
})
 .setNegativeButton("取消", null).show();
	}
	
	private void initBeepSound() {
		if (playBeep && mediaPlayer == null) {
			// The volume on STREAM_SYSTEM is not adjustable, and users found it
			// too loud,
			// so we now play on the music stream.
			setVolumeControlStream(AudioManager.STREAM_MUSIC);
			mediaPlayer = new MediaPlayer();
			mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
			mediaPlayer.setOnCompletionListener(beepListener);

			AssetFileDescriptor file = getResources().openRawResourceFd(
					R.raw.beep);
			try {
				mediaPlayer.setDataSource(file.getFileDescriptor(),
						file.getStartOffset(), file.getLength());
				file.close();
				mediaPlayer.setVolume(BEEP_VOLUME, BEEP_VOLUME);
				mediaPlayer.prepare();
			} catch (IOException e) {
				mediaPlayer = null;
			}
		}
	}

	private static final long VIBRATE_DURATION = 200L;
	private void playBeepSoundAndVibrate() {
		if (playBeep && mediaPlayer != null) {
			mediaPlayer.start();
		}
		if (vibrate) {
			Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
			vibrator.vibrate(VIBRATE_DURATION);
		}
	}

	/**
	 * When the beep has finished playing, rewind to queue up another one.
	 */
	private final OnCompletionListener beepListener = new OnCompletionListener() {
		public void onCompletion(MediaPlayer mediaPlayer) {
			mediaPlayer.seekTo(0);
		}
	};

	
class Getmessage implements Runnable{
       String code="";
	public Getmessage(String c){
		code=c;
	}
	public void run() {
		 ISBN=editText.getText().toString();
		List params=new ArrayList();
		params.add(new BasicNameValuePair("ASK","GetBookMessage"));
		params.add(new BasicNameValuePair("code",code));
		PostMessage postMessage=new PostMessage(params);
		String result=postMessage.getResult();
		Message msg=handler2.obtainMessage();
		if(result.equals("-1")){
			msg.what=-1;
		}else {
		try {
			JSONArray jsonArray=new JSONArray(result);
		if(jsonArray.length()==0){
		  msg.what=0;	
		  }else {
		msg.what=1;
		values.put("bookname",jsonArray.optJSONObject(0).get("bookname")+"") ;
		values.put("press",jsonArray.optJSONObject(1).get("press")+"") ;
		values.put("describe",jsonArray.optJSONObject(2).get("describe")+"") ;
		values.put("author",jsonArray.optJSONObject(3).get("author")+"") ;
		String textcid= jsonArray.optJSONObject(4).get("textcid")+"";
		values.put("textcid",textcid);
		String textString=new ReadMessage(context).getTypeString(textcid);
	    values.put("textString", textString);
		  }
		} catch (JSONException e) {
			Log.d("my", e+"");
			e.printStackTrace();
		}	
		}
		handler2.sendMessage(msg);
	}
}
	
	
class GetBookHandler extends Handler{
public void handleMessage(Message msg) {
if(msg.what==1){
	String describe=values.get("describe");
	String press=values.get("press");
	String bookname=values.get("bookname");
	String author=values.get("author");
	String textcid=values.get("textcid");
	String textString=values.get("textString");
	Intent intent=new Intent();
	intent.putExtra("describe", describe);
	intent.putExtra("press",press);
	intent.putExtra("bookname",bookname);
	intent.putExtra("author",author);
	intent.putExtra("textcid",textcid);
	intent.putExtra("textString",textString);
	intent.putExtra("ISBN",ISBN);
    setResult(RESULT_OK, intent);
    finish();
}else if(msg.what==0){
Toast.makeText(context,"暂时无法找到该书籍,请手动填写信息", Toast.LENGTH_LONG).show();
}
else if(msg.what==-1){
Toast.makeText(context,R.string.neterror, Toast.LENGTH_LONG).show();
}
mydialog.dissmissDialog();
}
}

public void Back(View view){
	finish();
}
}